一、概述
一主多從,可以緩解讀的壓力,但是一旦主宕機了,就不能寫了,所以我們可以采用雙主雙從架構來改進它的不足。
二、雙主雙重架構圖
架構規劃
- 主master 3307 —> 從slave 3309
- 主master 3308 —> 從slave 3310
- 3307 <—> 3308 互為主從
- 2個寫節點,每個寫節點下又是2個讀節點
-
三、環境配置
A、在MySQL主服務器3307配置文件my.cnf里面加入
-
log-bin=mysql-bin
server-id=3307 - B、在MySQL主服務器3308配置文件my.cnf里面加入
- log-bin=mysql-bin
server-id=3308 - C、在MySQL從服務器3309配置文件my.cnf里面加入
- server-id=3309
- D、在MySQL從服務器3310配置文件my.cnf里面加入
- server-id=3310
- E、在第一臺主服務器3307的my.cnf文件增加如下配置
- auto_increment_increment=2
auto_increment_offset=1 #不一樣的點 相當于起始值
log-slave-updates
sync_binlog=1 - F、在第二臺主服務器3308的my.cnf文件增加如下配置
- auto_increment_increment=2
auto_increment_offset=2 #不一樣的點 相當于起始值
log-slave-updates
sync_binlog=1 -
G、配置項說明
auto_increment_increment
- 控制主鍵自增的自增步長,用于防止 Master 與 Master 之間復制出現重復自增字段值,通常auto_increment_increment=n,有多少臺主服務器,n 就設置為多少
- auto_increment_offset=1
-
設置自增起始值,這里設置為1,這樣 Master 的 auto_increment 字段產生的數值是:1, 3, 5, 7, …等奇數ID
注意 auto_increment_offset 的設置,不同的 master 設置不應該一樣,否則就容易引起主鍵沖突,比如 master1 的 offset=1,則 master2 的 offset=2,master3的 offset=3
log-slave-updates - 在雙主模式中,log-slave-updates 配置項一定要配置,否則在master1(3307)上進行了更新數據,在 master (3308) 和 slave1 (3309) 上會更新,但是在 slave2 (3310) 上不會更新
- sync_binlog
- 表示每幾次事務提交,MySQL把binlog緩存刷進日志文件中,默認是0,最安全的是設置為1。sync_binlog=0,當事務提交之后,MySQL不做fsync之類的磁盤同步指令刷新binlog_cache中的信息到磁盤,而讓Filesystem自行決定什么時候來做同步,或者cache滿了之后才同步到磁盤。sync_binlog=n,當每進行n次事務提交之后,MySQL將進行一次fsync之類的磁盤同步指令來將binlog_cache中的數據強制寫入磁盤。
-
注意
? ? 從庫只開啟 log-bin 功能,不添加 log-slave-updates 參數,從庫從主庫復制的數據不會寫入log-bin日志文件里。
? ? 開啟 log-slave-updates 參數后,從庫從主庫復制的數據會寫入 log-bin 日志文件里。這也是該參數的功能。
? ? 直接向從庫寫入數據時,是會寫入log-bin日志的。
? ? 在自動生成主鍵的時候,會在已生成主鍵的基礎上按照規則生成,即比存在的值大四、服務啟動
進入 /usr/local/mysql-5.7.24/bin 目錄,重啟四個 MySQL 服務,啟動時指定配置文件
- ./mysqld_safe --defaults-file=/usr/local/mysql-5.7.24/data/3307/my.cnf &
./mysqld_safe --defaults-file=/usr/local/mysql-5.7.24/data/3308/my.cnf &
./mysqld_safe --defaults-file=/usr/local/mysql-5.7.24/data/3309/my.cnf &
./mysqld_safe --defaults-file=/usr/local/mysql-5.7.24/data/3310/my.cnf &